package juego.tests;

import juego.modelo.Movimiento;
import juego.modelo.Punto;
import juego.modelo.Pacman;
import juego.modelo.Tablero;
import junit.framework.TestCase;

public class PacmanTest extends TestCase {
	
	Punto punto=new Punto(10,20);
	Pacman pacman= new Pacman(punto);

	public void testPacman() {
		try{
		Punto otroPunto = null;
		Pacman pacman= new Pacman(otroPunto);
		fail();
		}catch (IllegalArgumentException e){
			assertTrue(true);
		}
	}

	public void testGetPosicion() {
		try {
			Punto x = pacman.getPosicion();
			assert(punto==x);
		} catch (NullPointerException e) {
			fail();
		}
	}

	public void testMover() {
		try {
			Tablero tablero = Tablero.getInstance();
			tablero.crearJuego(1);
			pacman=tablero.getPacman();// posicion inicial en el mapa1 de pacman es (280,460)
			pacman.mover(Movimiento.IZQUIERDA);
			assertEquals (pacman.getPosicion().getPuntoX(),279);
			assertEquals (pacman.getPosicion().getPuntoY(),460);
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}
	

	public void testGetDireccionMovimiento() {
		try {
			Movimiento mov = pacman.getDireccionMovimiento();
			assertEquals (mov.toString(),"IZQUIERDA");
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}

	public void testSetDireccionMovimiento() {
		try {
			pacman.setDireccionMovimiento(Movimiento.DERECHA);
			Movimiento mov = pacman.getDireccionMovimiento();
			assertEquals(mov.toString(), "DERECHA");
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}

	public void testGetVidas() {
		try {
			assertEquals(pacman.getVidas(), 3);
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}

	public void testSetVidas() {
		try {
			pacman.setVidas(22);
			assertEquals(pacman.getVidas(), 22);
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}
	
	public void testSetVidasError() {
		try {
			pacman.setVidas(-1);
			fail("no se puede tener vidas menos de 0");
		} catch (IndexOutOfBoundsException e) {
			assertTrue(true);
		}
	}

	public void testGetVelocidadPacman() {
		try {
			int velocidad = pacman.getVelocidadPacman();
			assertEquals(velocidad, 20);
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}

	public void testSetVelocidadPacman() {
		try {
			pacman.setVelocidadPacman(2);
			assertEquals(pacman.getVelocidadPacman(), 2);
		} catch (IndexOutOfBoundsException e) {
			fail();
		}
	}

	public void testSetVelocidadPacmanError() {
		try {
			pacman.setVelocidadPacman(-1);
			fail("no se puede tener velosidad menos de 0");
		} catch (IndexOutOfBoundsException e) {
			assertTrue(true);
		}
	}

	public void testDesaparecer() {
		try{
			Tablero tablero = Tablero.getInstance();
			tablero.crearJuego(1);
			pacman=tablero.getPacman();
			pacman.desaparecer();
			assertEquals(pacman.getVidas(), 2);
			assertEquals(pacman.getPosicion(),tablero.getPosicionInicialPacman());
		}catch(Exception e){
		fail();
		}
	}

	public void testGetXtestGetY() {
		Tablero tablero = Tablero.getInstance();
		tablero.crearJuego(1);
		pacman=tablero.getPacman();// posicion inicial en el mapa1 de pacman es (280,460)
		assertEquals (pacman.getX(),280);
		assertEquals (pacman.getY(),460);
		assertTrue(true);
	}

	public void testVivir() {
		try {
			Tablero tablero = Tablero.getInstance();
			tablero.crearJuego(1);
			pacman=tablero.getPacman();// posicion inicial en el mapa1 de pacman es (280,460)
			pacman.vivir();
			assertEquals (pacman.getPosicion().getPuntoX(),279);
			assertEquals (pacman.getPosicion().getPuntoY(),460);
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}
	
	public void testGetEstadoPoderoso() {
		try {
			boolean estado = pacman.getEstadoPoderoso();
			assertEquals (estado,false);
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}

	public void testSetEstadoPoderoso() {
		try {
			boolean estado = pacman.getEstadoPoderoso();
			assertEquals (estado,false);
			pacman.setEstadoPoderoso(true);
			estado = pacman.getEstadoPoderoso();
			assertEquals (estado,true);
		} catch (NullPointerException e) {
			fail();
		}
	}

	public void testGetAngulo() {
		try {
			double angulo = pacman.getAngulo();
			assertEquals (angulo,3.14);
			assertTrue(true);
		} catch (NullPointerException e) {
			fail();
		}
	}
}

